package Risk.Reseau;

import Risk.Moteur.*;

import java.io.IOException;


/**
 * Classe formatant les donnees de jeu selon le modele xml demande
 * et permettant ainsi l'envoie au serveur
 * @version 1.0
 * date 29/12/2007
 * @author Sebastien Depoix
 */
public class TraitementClient {

    private static int	intCompteur = 0;

    private Client	client;

    /**
     * Constructeur :
     *  cree la connexion en utilisant la classe Client,
     *  envoie la premiere instruction au serveur.
     *
     * @param hote Adresse IP ou nom d'hote du serveur
     * @param port Numero de port du serveur
     * @throws java.io.IOException
     */
    public TraitementClient(String hote, int port) throws IOException {
	client = new Client(hote, port);
    }

    /**
     * Envoie au serveur de la balise de debut de jeu et met le compteur a zero
     */
    public String debutDeJeu() {
	intCompteur = 0;

	String	aEnvoyer = "";

	try {
	    aEnvoyer = "<global>";
	    client.envoyerAuServeur(aEnvoyer);
	} catch (IOException ex) {
	    ex.printStackTrace();
	}

	return aEnvoyer;
    }

    /**
     * Envoie au serveur de l'etat du pays passe en parametre
     * @param pays Le pays qui a ete modifie
     * @return La chaine de caractere envoyee au serveur
     */
    public String envoieInformationsPays(Pays pays) {
	String	aEnvoyer = "";

	try {
	    intCompteur++;
	    aEnvoyer = "<territoire><selecteur>" + pays.getNom() + "</selecteur><joueur>" + pays.getJoueur().getNom()
		       + "</joueur><force>" + pays.getNbArmee() + "</force><mvt>" + intCompteur + "</mvt></territoire>";
	    client.envoyerAuServeur(aEnvoyer);
	} catch (IOException ex) {
	    ex.printStackTrace();
	}

	return aEnvoyer;
    }

    /**
     * Envoie au serveur de l'etat initial d'un joueur
     * @param joueur Un joueur dont on doit envoyer les informations initiales
     * @return La chaine de caractere envoyee au serveur
     */
    public String envoieInitialisationJoueur(Joueur joueur) {
	String	aEnvoyer = "";

	try {
	    intCompteur++;
	    aEnvoyer = "<joueur><selecteur>" + joueur.getNom() + "</selecteur><nbTerritoires>0</nbTerritoires><mvt>"
		       + intCompteur + "</mvt></joueur>";
	    client.envoyerAuServeur(aEnvoyer);
	} catch (IOException ex) {
	    ex.printStackTrace();
	}

	return aEnvoyer;
    }

    /**
     * Ferme la connexion et reinitialise le client a null
     * @throws java.io.IOException
     */
    public void fermerConnexion() throws IOException {
	client.fermerConnexion();
	client = null;
    }

    /**
     * Envoie au serveur de la balise de fin de jeu
     */
    public String finDePartie() {
	String	aEnvoyer = "";

	try {
	    aEnvoyer = "</global>";
	    client.envoyerAuServeur(aEnvoyer);
	} catch (IOException ex) {
	    ex.printStackTrace();
	}

	return aEnvoyer;
    }

    /**
     * Modifie la valeur du compteur
     * @param intCompteur
     */
    public static void setIntCompteur(int intCompteur) {
	TraitementClient.intCompteur = intCompteur;
    }
}
